QT for windows文件夹图标设置
在Windows系统上,我们可以手动设置设置文件夹的图标(属性-自定义-更改图标),一旦设置成功之后,文件夹图标就变了,这是手动操作,本文讲的是如果通过Qt的代码实现它
首先,文件夹图标能改变的原理是,文件夹内含有一个desktop.ini的文件,此文件规定了文件夹的图标及其他属性,本文只讲图标,一个标准的desktop.ini文件如下
[.ShellClassInfo]
IconResource=C:\aaa\bbb.ico,0
同时,文件夹的属性必须是系统文件夹且desktop.ini的属性(属性-详细信息-属性)是系统+隐藏文件(HS)才能使之生效,代码如下
QString icoPath = QStringapplicationDirPath()+ "/aaa/bbb.ico";
QFileInfo fileInfo(icoPath);
QString iniPath = localPath + "/desktop.ini";
QFileInfo iniFileInfo(iniPath);
if(!iniFileInfo.isFile()) {
QSettings* settings = new QSettings(iniPath , QSettings::IniFormat); // 当前目录的INI文件
//支持ini文件内的中文
settings->setIniCodeccodecForName("GB2312");
settings->beginGroup(".ShellClassInfo");
settings->setValue("IconResource", icoPath + ",0");
settings->endGroup();
delete settings;
//删去文件中的引号
QFile file(iniPath);
QByteArray content;
ifReadOnly) {
content = file.readAll();
file.close();
ifWriteOnly | QIODevice::Truncate) {
content.replace("\"", "");
content.replace("/", "\\");
file.write(content);
file.close();
}
}
//设置 desktop.ini 文件属性为系统+隐藏
SetFileAttributes((LPCWSTR)iniPath.unicode(), FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
//设置文件夹为系统文件夹,这样desktop.ini才能生效
QProcess::execute(QString("attrib +S \"%1\"").arg(iniFileInfo.path()));
}
需要说明的是,desktop.ini文件内的路径分隔符最好是反斜杠(\),如果路径中有中文,需要设置编码格式为GB2312